home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Interactive 7
/
PC World Interactive 7.iso
/
program
/
qbprog.EXE
/
SIRALA.TXT
< prev
next >
Wrap
Text File
|
1980-01-06
|
18KB
|
331 lines
┌──────────────────────────────────────────────────────────────────────────┐
│┌────────────────────────────────────────────────────────────────────────┐│
││ ││
││ QuickBasic'de karƒìlaƒtìºìm sorunlarì nasìl aƒtìm? ││
││ ││
││ Minik bazì sorunlar ││
│└────────────────────────────────────────────────────────────────────────┘│
│ PS 31 · ₧ubat'96 Gürol Demir │
└──────────────────────────────────────────────────────────────────────────┘
Bu ay basic dilinde minik bazì sorunlarìn halli üzerinde duralìm.
Konumuz alt baƒlìklarì ƒöyle:
a) Sìralama algoritmasì
b) Türkçe heceleme
c) Binary dosya yapìsì
d) Hscplayer'in basic'e monte edilmesi
┌────────────────────────┐
─────────┤ Sìralama algoritmasì │
└────────────────────────┘
Sanìrìm yaptìºìnìz programlarda zaman zaman verilerinizi sìraya
sokma ihtiyacì duydunuz. Bunun için kliƒeleƒmiƒ bir yöntem vardìr. Klasik
olan bu yöntemin algoritmasì ƒöyledir.
(Amaç verilerin büyükten küçüºe doºru sìralanmasì)
1 - Sayac1'i sìfìrla
2 - Sayac1'i bir arttìr
3 - Sayac1 toplam veri adedini geçti mi?
a) Evet : programì bitir.(10'na git)
b) Hayìr: devam et
4 - Sayac1 ile tanìmlanan veriyi al
5 - Sayac2'yi sìfìrla
6 - Sayac2'yi bir arttìr
7 - Sayac1 toplam veri adedini geçti mi?
a) Evet : 2'ye git
b) Hayìr: devam et
8 - Sayac2 ile tanìmlanan veriyi al
9 - Sayac1 ve Sayac2 ile ƒaretlenen iki veriyi kìyasla
a) Eƒit : 6'ya git
b) Sayac1 ile ƒaretli veri daha büyük : 6'ya git
c) Sayac2 ile ƒaretli veri daha büyük : Verileri deºiƒtir ve 6'ya git
10 - Bitiƒ
(Amaç verilerin küçükten büyüºe doºru sìralanmasì)
1 - Sayac1'i sìfìrla
2 - Sayac1'i bir arttìr
3 - Sayac1 toplam veri adedini geçti mi?
a) Evet : programì bitir.(10'na git)
b) Hayìr: devam et
4 - Sayac1 ile tanìmlanan veriyi al
5 - Sayac2'yi sìfìrla
6 - Sayac2'yi bir arttìr
7 - Sayac1 toplam veri adedini geçti mi?
a) Evet : 2'ye git
b) Hayìr: devam et
8 - Sayac2 ile tanìmlanan veriyi al
9 - Sayac1 ve Sayac2 ile ƒaretlenen iki veriyi kìyasla
a) Eƒit : 6'ya git
b) Sayac1 ile ƒaretli veri daha küçük : 6'ya git
c) Sayac2 ile ƒaretli veri daha küçük : Verileri deºiƒtir ve 6'ya git
10 - Bitiƒ
Rakamsal verilerde ve standart metin dosyalarìnda geçerli bu yöntem
türkçe karakter bulunan stringlerde iƒe yaramaz. Örneºin "Ç" harfi bu usulde
"Z" den sonra gelir.
Aƒaºìda verilen modül ise Türkçe verileri düzgün bir sìraya sokar.
┌───────────────────────────────────────────────────────────────────┐
│ 'Bu program türke karakterlerin yer aldìºì stringleri sìralar │
│ │
│'============================= Tanìmlar ========================== │
│ Enson = 5 'Toplam veri sayìsì │
│ Nerden = 1 'Kaçìncì karakter baz alìnacak │
│ Uzunluk = 50 'En uzun verinin boyu │
│ Tercih = 1 'Küçükten büyüºe ters sìralama │
│ '1 den farklì ise düz sìralama yapar │
│ │
│ REDIM Veri$(Enson) │
│ │
│ Veri$(1) = "Çamlìbel" │
│ Veri$(2) = "Ceyhan" │
│ Veri$(3) = "çalìƒma" │
│ Veri$(4) = "çalìƒdì" │
│ Veri$(5) = "deneme" │
│'======================= Sìralama programì ====================== │
│ CLS : PRINT "Sìralama yapìyorum" │
│ FOR I = 1 TO Enson: FOR Y = 1 TO Enson: FOR z = Nerden TO Uzunluk │
│ Veri$(Y) = LEFT$(Veri$(Y) + SPACE$(Uzunluk), Uzunluk) │
│ Veri$(I) = LEFT$(Veri$(I) + SPACE$(Uzunluk), Uzunluk) │
│ B = ASC(MID$(Veri$(Y), z, 1)): C = ASC(MID$(Veri$(I), z, 1)) │
│ IF B <> C THEN │
│ SELECT CASE CHR$(B) │
│ CASE "ç", "Ç": B = 67.5 │
│ CASE "º", "ª": B = 71.5 │
│ CASE "i", "ÿ": B = 73.5 │
│ CASE "ö", "Ö": B = 79.5 │
│ CASE "ƒ", "₧": B = 83.5 │
│ CASE "ü", "Ü": B = 85.5 │
│ CASE "I": B = 73 │
│ CASE ELSE: B = (223 AND B) │
│ END SELECT │
│ SELECT CASE CHR$(C) │
│ CASE "ç", "Ç": C = 67.5 │
│ CASE "º", "ª": C = 71.5 │
│ CASE "i", "ÿ": C = 73.5 │
│ CASE "ö", "Ö": C = 79.5 │
│ CASE "ƒ", "₧": C = 83.5 │
│ CASE "ü", "Ü": C = 85.5 │
│ CASE "I": C = 73 │
│ CASE ELSE: C = (223 AND C) │
│ END SELECT │
│ SELECT CASE B │
│ CASE C │
│ CASE ELSE │
│ SELECT CASE Tercih │
│ CASE 1 │
│ IF B < C THEN SWAP Veri$(I), Veri$(Y) │
│ CASE ELSE │
│ IF B > C THEN SWAP Veri$(I), Veri$(Y) │
│ END SELECT │
│ EXIT FOR │
│ END SELECT │
│ END IF │
│ NEXT: NEXT: NEXT │
│'==========================Ekrana döküm ===========================│
│ CLS : FOR I = 1 TO Enson: PRINT Veri$(I): NEXT │
│ │
└───────────────────────────────────────────────────────────────────┘
┌────────────────────────┐
─────────┤ Heceleme algoritmasì │
└────────────────────────┘
Kelime iƒlemci programlamaya soyunan kiƒiler için bilinmesi
gereken algoritmalardan birisi de türkçe heceleme algoritmasìdìr. Türkçe
heceleme yapmak için uzun uzun dil bilgisi kurallarìnì bilmek gerekmez.
Sadece sesli harfleri tanìmak yeterlidir. Sesli harfler herkesin bildiºi
gibi "aeìioöuü" dìr.
Temel mantìk ƒudur. Bir kelimede ilk sesli harf bulunur, sonra
ikinci sesli harf bulunur. Bunlarìn bulunduºu yer arasìnda ki mesafe heceyi
belirler. ₧öyleki;
a) Hiç sesli harf yok : Kelimenin tamamì tek hecedir
b) Tek sesli harf var : Kelimenin tamamì tek hecedir
c) ÿki sesli harfin yerleri arasìnda tek karakterlik mesafe var:
ilk hece= Kelimenin baƒì ile ilk seslinin bulunduºu yer
d) ÿki sesli harfin yerleri arasìnda çok mesafe var:
ilk hece= Kelimenin baƒì ile ilk seslinin bulunduºu yerin
bir fazlasì
Aƒaºìdaki program bu konuda bir örnektir.
┌────────────────────────────────────────────────────────────────────────┐
│ Sesli$ = "AaEeÿiIìÖöOoÜüUu" │
│ Kelime$ = "Çekoslavakyalìlaƒtìrìmadìklarìmìzdanmìsìnìz?" │
│ │
│ CLS │
│ DO │
│ GOSUB Hece │
│ Kelime$ = RIGHT$(Kelime$, LEN(Kelime$) - LEN(Hece$)) │
│ IF LEN(Kelime$) = 0 THEN │
│ PRINT Hece$ │
│ EXIT DO │
│ END IF │
│ PRINT Hece$; "-"; │
│ LOOP │
│ END │
│ │
│ │
│ Hece: │
│ Yer1 = 0 'Birinci sesli harfin yeri │
│ Yer2 = 0 'ÿkinci " " " │
│ │
│ FOR I = 1 TO LEN(Kelime$) │
│ │
│ IF Yer1 = 0 THEN │
│ IF INSTR(Sesli$, MID$(Kelime$, I, 1)) > 0 THEN Yer1 = I │
│ ELSE │
│ │
│ IF Yer2 = 0 THEN │
│ IF INSTR(Yer1, Sesli$, MID$(Kelime$, I, 1)) > 0 THEN Yer2 = I │
│ END IF │
│ END IF │
│ NEXT │
│ │
│ │
│ IF Yer1 > 0 AND Yer2 > 0 THEN │
│ IF Yer2 - Yer1 > 2 THEN Ara = Yer1 + 1 ELSE Ara = Yer1 │
│ Hece$ = LEFT$(Kelime$, Ara) │
│ ELSE │
│ IF Yer1 = 0 THEN Hece$ = Kelime$ 'Sesli harf yok │
│ IF Yer2 = 0 THEN Hece$ = Kelime$ 'Tek sesli harf var │
│ END IF │
│ RETURN │
└────────────────────────────────────────────────────────────────────────┘
┌────────────────────────┐
─────────┤ Binary dosya yapìsì │
└────────────────────────┘
Çoºu programcì için bir dosyanìn herhangi bir yerinden istenilen
uzunlukta veri okunmasì veya yazìlmasì bir sorundur. Uygulamada gördüºüm bazì
gereksiz program satìrlarì binary dosya yapìsìnì anlatmama neden olmuƒtur.
Diyelim ki bir data dosyanìz var. Bu dosyanìn 1243 ncü konumundan
37 byte okumak, 2587 nci konumuna 3 byte yazmak silmek istiyorsunuz.
Dosyayì sìralì okuma, sìralì yazma, rastgele okuma yazma gibi
türlerde açarsanìz bu iƒlemleri kolay yapamazsìnìz. Oysa binary açarsanìz
bu iƒler çok kolay örnekleyelim.
OPEN "DENE.DAT" FOR BINARY AS 1 'Dosya açìldì
A$= SPACE$(37): GET 1, 1243, A$ '1243'den 37 byte okundu
A$= "123": PUT 1, 2587, A$ '2587'ye 3 byte yazìldì
Binary dosya yapìsìnìn kolaylìklarì bununla bitmiyor. Örneºin
bir dosyadaki rakamsal veri eºer tek byte sìºmìyorsa yapìlan klasik iƒlem
ƒöyleydi (deºer= birinci byte deºeri*256 + ikinci byte deºeri) oysa binary
yapìda bu iƒ (GET 1,,Deger%) komutu ile kendiºilinden yapìlìyor.
Son olarak binary yapì ile database programlarìn dosya hìzlarìna
basic dili ile ulaƒìlabildiºini belirtteyim. ÿlgilenen olursa bu konuya
tekrar döneriz. Bu sayìda bir dosyanìn istenilen yerinden istenilen byte
uzunlukta bir kìsmì silerek dosyayì tekrar aynì isimle size geri veren bir
program modülü de veriyoruz.
┌──────────────────────────────────────┐
─────────┤ Hscplayer'in basic'e monte edilmesi │
└──────────────────────────────────────┘
Adlib uyumlu ses kartlarìnda çalìƒmak üzere tasarlanmìƒ bir
sürücü var. Bu sürücü (.hsc) modunda yazìlmìƒ ses dosyalarìnì hemen her dilde
kolaylìkla dinlenebilmesi için yazìlmìƒ.
┌──────────────────────────────────────────────────────────────┐
│ HSC-Tracker V1.2 │
│ │
│ (C)1993 by Zwerg Zwack and Chicken │
│ Soundroutine (C) 1992/93 by NEO Software Produktions GmbH │
│ Home of HSC-Tracker: The Lycaeum +41 41-762-989 (v32b,v42b) │
│ │
│ Registered to you! │
└──────────────────────────────────────────────────────────────┘
Döküman dosyasìnda bu ƒekilde bir giriƒ yapan bu mütevazi
insanlarìn yaptìklarì sürücü gerçekten tam bir harika. Programlarìnìn
bedava olduºunu ve bedava olmak koƒuluyla diºer programlarda da kullanìlmasì
için izin verdiklerini belirten bu kiƒileri yürekten kutlarìm.
Sürücünün herhangi bir bellek alanìna sìfìrìncì offsetinden
baƒlamak üzere atìlmasì ve sonra da dinlenmek istenen dosyanìn okutulup
verilerin segment ve offset adreslerinin bu sürücüye bildirilmesi gerekiyor.
Basic programcìlarì için oldukca karmaƒìk sayìlacak bu yapì
için sizlere program gönderiyorum. Bu programlar hakkìnda kìsaca bilgiler:
┌─────────────────────────────────┐
│ Hscdinle.Asm isimli kaynak kod │
└─────────────────────────────────┘
Bu hscplayer ile birlikte gerekli bir kaç yordamì içeriyor.
Basic programcìlarì kullanmak için;
Versiyon 7.1 'de
DEL HSCDINLE.LIB
TASM HSCDINLE/m
LIB QBX *INTRPT
LIB HSCDINLE +INTRPT+HSCDINLE,;
LINK/Q HSCDINLE.LIB,HSCDINLE.QLB,,QBXQLB;
QBX/L HSCDINLE
Versiyon 4.5 'de
DEL HSCDINLE.LIB
TASM HSCDINLE/m
LIB QB *INTRPT
LIB HSCDINLE +INTRPT+HSCDINLE,;
LINK/Q HSCDINLE.LIB,HSCDINLE.QLB,,BQLB45;
QB/L HSCDINLE
ƒeklinde bir batch dosya çalìƒtìrmalarì gerekiyor.
┌─────────────────────────────────┐
│ Hscdinle.Bas isimli kaynak kod │
└─────────────────────────────────┘
Bu kaynak kod sadece versiyon 7.1'de çalìƒmak üzere tasarlandì.
Gerekce ise gayet basit çünkü bu versiyonda "ON LOCAL ERROR", "CURDIR$" gibi
geliƒmiƒ komutlar var.
Bu programìn ayrìca .exe'si de verildi. Porgram vasìtasìyla
hsc müzik dinleyebilir, bu dinlemeyi tsr olarak yapabilirsiniz. Oldukça
beºeni alan bir program olduºunu belirtmeliyim.
┌───────────────────────────────┐
│ Hscbas.Bas isimli kaynak kod │
└───────────────────────────────┘
Bu program ise her iki versiyonda yani versiyon 4.5'da dahil
olmak üzere hsc müzik dinlemeye bir örnek olarak hazìrlandì.
Unutulmamasì gereken bir nokta her iki program için basice
"QBX /L HSCDINLE" veya "QB /L HSCDINLE" ƒeklinde baƒlamak gerekiyor.
┌────────────────────────────────┐
│ Odam.Hsc isimli müzik dosyasì │
└────────────────────────────────┘
Sevgili M.Doºan ÖZDEMÿR tarafìndan yapìlmìƒ, .hsc formatìnda
güzel ve türkçe bir melodi. Daha baƒka .hsc müzikler için kendisine internet
üzerinden "Dogano@Doruk.com.tr" adresi yoluyla ulaƒabilirsiniz.
Görüƒmek üzere...
Adres:
PC World/Türkiye
PS-Gürol Demir
Eski Büyükdere cad.
Sanayi mah. Behçet sokak
No:25/B Kat:5
80650 4.Levent / ÿSTANBUL
Internet : gurold@doruk.com.tr